/**
 * Created by wangjunfei on 2017/4/12.
 */
/*
 * 这个方法加载微信js-sdk，做为公共方法在每个微信前端中调用
 * vm：当前页VUE组件实例
 * jsApiList：当前页需要初始化的微信API
 */
import {siteUrl,getLocationSearch,$ajax} from './common'
import Vue from 'vue'
import VueResource from 'vue-resource'
//启用请求组件
Vue.use(VueResource)
let vm = new Vue();
let weixin_sdk = ((window) => {
  //if(!window.wx){
  //  return false;
  //}
  return {
    ready:function (successFn) {
      wx.ready(function(){
        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
        if(successFn){
          successFn();
        }
      });
    },
    error:function (func) {
      wx.error(function(res){
        // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
        if(func){
          func(res);
        }
      });
    },
    oauth:function(successFn){// 网页授权登录并返回用户信息
      let URL_OAUTH = siteUrl + '/weixin/wxOauth'
      let code = getLocationSearch('code')
      $ajax.get(URL_OAUTH + '?code=' + code,(res)=>{
        if(successFn){
          successFn(res);
        }
      })
      //vm.$http.get(URL_OAUTH + '?code=' + code).then((res)=>{
      //  if(successFn){
      //    successFn(res);
      //  }
      //})
    },
    permission:function(successFn,errorFn,jsApiList){
      wx.ready(function() {
        if (successFn) {
          successFn();
        }
      })

        wx.error(function(res){
          if(errorFn){
            errorFn();
          }
        })

        function wxconfig(res){
    	  let obj;
    	  if(typeof res =="object"){
    		  obj = res;
    	  }
    	  else if(typeof res =="string"){
    		  obj = JSON.parse(res) //res为json字符串，需要转换为对象,请王俊飞加判断，res为字符串或对象的处理  
    	  }
          if(200 == obj.code){
            let options = obj.response;
            wx.config({
              debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
              appId: options.appId, // 必填，公众号的唯一标识
              timestamp: options.timestamp, // 必填，生成签名的时间戳
              nonceStr: options.nonceStr, // 必填，生成签名的随机串
              signature: options.signature,// 必填，签名，见附录1
              jsApiList: jsApiList // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
            });
          } else {
            console.log('load weixin sdk failed:');
          }
        }

        // 微信sdk
        let data = {url : window.location.href.split('#')[0]}
        data = JSON.stringify(data)
        console.log('data----'+data);
        let url = siteUrl + '/weixin/config_options'
        $ajax.post(url,data,wxconfig)
        //vm.$http.post(url, data).then(function (res){
        //  wxconfig(res)
        //})
    },
    checkJsApi:function (jsApiList,successFn) {
      wx.checkJsApi({
        jsApiList: jsApiList, // 需要检测的JS接口列表，所有JS接口列表见附录2,Array
        success: function(res) {
          // 以键值对的形式返回，可用的api值true，不可用为false
          // 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    onMenuShareTimeline:function (title,link,imgUrl,successFn,cancelFn) {//获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
      wx.onMenuShareTimeline({
        title: title, // 分享标题
        link: link, // 分享链接
        imgUrl: imgUrl, // 分享图标
        success: function () {
          // 用户确认分享后执行的回调函数
          if(successFn){
            successFn();
          }
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
          if(cancelFn){
            cancelFn();
          }
        }
      });
    },
    onMenuShareAppMessage:function (title,desc,link,imgUrl,type,dataUrl,successFn,cancelFn) {//获取“分享给朋友”按钮点击状态及自定义分享内容接口
      wx.onMenuShareAppMessage({
        title: title, // 分享标题
        desc: desc, // 分享描述
        link: link, // 分享链接
        imgUrl: imgUrl, // 分享图标
        type: type, // 分享类型,music、video或link，不填默认为link
        dataUrl: dataUrl, // 如果type是music或video，则要提供数据链接，默认为空
        success: function () {
          // 用户确认分享后执行的回调函数
          if(successFn){
            successFn();
          }
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
          if(cancelFn){
            cancelFn();
          }
        }
      });
    },
    onMenuShareQQ:function (title,desc,link,imgUrl,successFn,cancelFn) {
      wx.onMenuShareQQ({
        title: title, // 分享标题
        desc: desc, // 分享描述
        link: link, // 分享链接
        imgUrl: imgUrl, // 分享图标
        success: function () {
          // 用户确认分享后执行的回调函数
          if(successFn){
            successFn();
          }
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
          if(cancelFn){
            cancelFn();
          }
        }
      });
    },
    chooseImage:function (count,sizeType,sourceType,successFn) {
      wx.chooseImage({
        count: count, // 默认9
        sizeType: sizeType, // ['original', 'compressed']可以指定是原图还是压缩图，默认二者都有
        sourceType: sourceType, // ['album', 'camera']可以指定来源是相册还是相机，默认二者都有
        success: function (res) {
          var localIds = res.localIds; // 返回选定照片的本地ID列表，localId可以作为img标签的src属性显示图片
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    previewImage:function (current,urls) {
      wx.previewImage({
        current: current, // 当前显示图片的http链接
        urls: urls // 需要预览的图片http链接列表 数组
      });
    },
    uploadImage:function (localId,isShowProgressTips,successFn) {
      wx.uploadImage({
        localId: localId, // 需要上传的图片的本地ID，由chooseImage接口获得
        isShowProgressTips: isShowProgressTips, // 默认为1，显示进度提示
        success: function (res) {
          var serverId = res.serverId; // 返回图片的服务器端ID
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    downloadImage:function (serverId,isShowProgressTips,successFn) {
      wx.downloadImage({
        serverId: serverId, // 需要下载的图片的服务器端ID，由uploadImage接口获得
        isShowProgressTips: isShowProgressTips, // 默认为1，显示进度提示
        success: function (res) {
          var localId = res.localId; // 返回图片下载后的本地ID
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    startRecord:function () {//开始录音接口
      wx.startRecord();
    },
    stopRecord:function (successFn) {
      wx.stopRecord({
        success: function (res) {
          var localId = res.localId;
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    onVoiceRecordEnd:function (completeFn) {//监听录音自动停止接口
      wx.onVoiceRecordEnd({
        // 录音时间超过一分钟没有停止的时候会执行 complete 回调
        complete: function (res) {
          var localId = res.localId;
          if(completeFn){
            completeFn(res);
          }
        }
      });
    },
    playVoice:function (localId) {//播放语言接口
      wx.playVoice({
        localId: localId // 需要播放的音频的本地ID，由stopRecord接口获得
      });
    },
    pauseVoice:function (localId) {
      wx.pauseVoice({
        localId: localId // 需要暂停的音频的本地ID，由stopRecord接口获得
      });
    },
    stopVoice:function (localId) {
      wx.stopVoice({
        localId: localId // 需要停止的音频的本地ID，由stopRecord接口获得
      });
    },
    onVoicePlayEnd:function (successFn) {//监听语音播放完毕接口
      wx.onVoicePlayEnd({
        success: function (res) {
          var localId = res.localId; // 返回音频的本地ID
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    uploadVoice:function (localId,isShowProgressTips,successFn) {//上传语音接口
      wx.uploadVoice({
        localId: localId, // 需要上传的音频的本地ID，由stopRecord接口获得
        isShowProgressTips: isShowProgressTips, // 默认为1，显示进度提示
        success: function (res) {
          var serverId = res.serverId; // 返回音频的服务器端ID
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    downloadVoice:function (serverId,isShowProgressTips,successFn) {
      wx.downloadVoice({
        serverId: serverId, // 需要下载的音频的服务器端ID，由uploadVoice接口获得
        isShowProgressTips: isShowProgressTips, // 默认为1，显示进度提示
        success: function (res) {
          var localId = res.localId; // 返回音频的本地ID
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    translateVoice:function (localId,isShowProgressTips,successFn) {//识别音频并返回识别结果接口
      wx.translateVoice({
        localId: localId, // 需要识别的音频的本地Id，由录音相关接口获得
        isShowProgressTips: isShowProgressTips, // 默认为1，显示进度提示
        success: function (res) {
          //alert(res.translateResult); // 语音识别的结果
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    getNetworkType:function (successFn) {//获取网络状态接口
      wx.getNetworkType({
        success: function (res) {
          var networkType = res.networkType; // 返回网络类型2g，3g，4g，wifi
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    openLocation:function (latitude,longitude,name,address,scale,infoUrl) {//使用微信内置地图查看位置接口
      wx.openLocation({
        latitude: latitude, // 纬度，浮点数，范围为90 ~ -90
        longitude: longitude, // 经度，浮点数，范围为180 ~ -180。
        name: name, // 位置名
        address: address, // 地址详情说明
        scale: scale, // 地图缩放级别,整形值,范围从1~28。默认为最大
        infoUrl: infoUrl // 在查看位置界面底部显示的超链接,可点击跳转
      });
    },
    getLocation:function (type,successFn) {//获取地理位置接口
      wx.getLocation({
        type: type, // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
        success: function (res) {
          var latitude = res.latitude; // 纬度，浮点数，范围为90 ~ -90
          var longitude = res.longitude; // 经度，浮点数，范围为180 ~ -180。
          var speed = res.speed; // 速度，以米/每秒计
          var accuracy = res.accuracy; // 位置精度
          if(successFn){
            successFn(res);
          }
        }
      });
    },
    startSearchBeacons:function (ticket,completeFn) {//开启查找周边ibeacon设备接口
      wx.startSearchBeacons({
        ticket:ticket,  //摇周边的业务ticket, 系统自动添加在摇出来的页面链接后面
        complete:function(argv){
          //开启查找完成后的回调函数
          if(completeFn){
            completeFn(argv);
          }
        }
      });
    },
    stopSearchBeacons:function (completeFn) {//关闭查找周边ibeacon设备接口
      wx.stopSearchBeacons({
        complete:function(res){
          //关闭查找完成后的回调函数
          if(completeFn){
            completeFn(res);
          }
        }
      });
    },
    onSearchBeacons:function () {//监听周边ibeacon设备接口
      wx.onSearchBeacons({
        complete:function(argv){
          //回调函数，可以数组形式取得该商家注册的在周边的相关设备列表
          if(completeFn){
            completeFn(argv);
          }
        }
      });
    },
    closeWindow:function () {//关闭当前网页窗口接口
      wx.closeWindow();
    },
    hideMenuItems:function (menuList) {//批量隐藏功能按钮接口
      wx.hideMenuItems({
        menuList: menuList // 要隐藏的菜单项，只能隐藏“传播类”和“保护类”按钮，所有menu项见附录3 数组
      });
    },
    showMenuItems:function (menuList) {
      wx.showMenuItems({
        menuList: menuList // 要显示的菜单项，所有menu项见附录3 数组
      });
    },
    showOptionMenu:function(){
      wx.showOptionMenu();
    },
    hideOptionMenu:function(){// 禁用分享等按钮
      wx.hideOptionMenu();
    },
    hideAllNonBaseMenuItem:function () {//隐藏所有非基础按钮接口
      wx.hideAllNonBaseMenuItem();
    },
    scanQRCode:function (needResult,scanType,successFn) {
      wx.scanQRCode({
        needResult: needResult, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
        scanType: scanType, // ["qrCode","barCode"]可以指定扫二维码还是一维码，默认二者都有
        success: function (res) {
          var result = res.resultStr; // 当needResult 为 1 时，扫码返回的结果
          successFn(res);
        }
      });
    },
    chooseWXPay:function (timestamp,nonceStr,mypackage,signType,paySign,successFn) {
      wx.chooseWXPay({
        timestamp: timestamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
        nonceStr: nonceStr, // 支付签名随机串，不长于 32 位
        package: mypackage, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=***）
        signType: signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
        paySign: paySign, // 支付签名
        success: function (res) {
          // 支付成功后的回调函数
          successFn(res);
        }
      });
    }
  }
})(window)

export {weixin_sdk}
